package com.weijian.demo1.controller;

import com.weijian.demo1.entity.Team;
import com.weijian.demo1.service.TeamService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 团队管理控制器
 * 提供团队创建、查询、成员管理等相关API接口
 */
@RestController
@RequestMapping("/api/teams")
@CrossOrigin(origins = "*")
@Tag(name = "团队管理", description = "提供团队创建、查询、成员管理等相关API接口")
public class TeamController {

    @Autowired
    private TeamService teamService;

    /**
     * 创建新团队
     * @param team 团队信息（名称、描述等）
     * @param userId 创建者用户ID
     * @return 创建成功的团队对象，包含团队ID
     * @apiNote 创建者自动成为团队管理员
     */
    @PostMapping
    @Operation(summary = "创建新团队", description = "创建一个新的团队，创建者自动成为团队管理员")
    public Team createTeam(
            @RequestBody @Parameter(description = "团队信息") Team team, 
            @RequestParam @Parameter(description = "创建者用户ID") Long userId) {
        return teamService.createTeam(team, userId);
    }

    /**
     * 获取指定用户的所有团队
     * @param userId 用户ID
     * @return 用户所属的团队列表
     * @apiNote 包括用户创建的团队和被邀请加入的团队
     */
    @GetMapping("/user/{userId}")
    @Operation(summary = "获取指定用户的所有团队", description = "根据用户ID获取该用户所属的团队列表，包括用户创建的团队和被邀请加入的团队")
    public List<Team> getUserTeams(@PathVariable @Parameter(description = "用户ID") Long userId) {
        return teamService.getTeamsByUser(userId);
    }

    /**
     * 获取所有团队列表
     * @return 系统中所有团队的列表
     * @apiNote 可用于团队发现功能，后续可添加分页支持
     */
    @GetMapping
    @Operation(summary = "获取所有团队列表", description = "获取系统中所有团队的列表，可用于团队发现功能")
    public List<Team> getAllTeams() {
        return teamService.getAllTeams();
    }

    /**
     * 向团队添加新成员
     * @param teamId 团队ID
     * @param userId 要添加的用户ID
     * @apiNote 需要团队管理员权限，被添加用户会自动获得成员权限
     */
    @PostMapping("/{teamId}/members/{userId}")
    @Operation(summary = "向团队添加新成员", description = "向指定团队添加新成员，需要团队管理员权限，被添加用户会自动获得成员权限")
    public void addMember(
            @PathVariable @Parameter(description = "团队ID") Long teamId, 
            @PathVariable @Parameter(description = "用户ID") Long userId) {
        teamService.addMember(teamId, userId);
    }

    /**
     * 获取团队成员列表
     * @param teamId 团队ID
     * @return 团队成员的用户信息列表
     * @apiNote 返回包含用户基本信息的列表，不包含敏感信息
     */
    @GetMapping("/{teamId}/members")
    @Operation(summary = "获取团队成员列表", description = "获取指定团队的成员列表，返回包含用户基本信息的列表，不包含敏感信息")
    public List<com.weijian.demo1.entity.User> getTeamMembers(@PathVariable @Parameter(description = "团队ID") Long teamId) {
        return teamService.getTeamMembers(teamId);
    }
}